import axios from 'axios'
import store from '@/store'
import router from '@/router'
import { removeToken } from '@/utils/auth'

// 基准路径
// 'http://ihrm-java.itheima.net/api/'
const baseURL = process.env.VUE_APP_BASE_API
// const baseURL = 'http://localhost:9528/dev-api'

// 创建axios实例对象
const service = axios.create({
  baseURL: baseURL
})
// 请求拦截器
service.interceptors.request.use(config => {
  const token = store.getters.token
  if (token) {
    config.headers = {
      Authorization: `Bearer ${token}`
    }
  }
  return config
}, error => {
  return Promise.reject(error)
})

// 响应拦截器
service.interceptors.response.use(ret => {
  return ret.data
}, error => {
  if (error.response.status === 401 && error.response.data.code === 10002) {
    // token已经失效,删除用户信息，跳转到登录页面
    store.commit('user/SET_TOKEN', '')
    store.commit('user/clearUserInfo')
    router.push('/login')
    // 清空本地缓存
    removeToken()
  }
  return Promise.reject(error)
})

// 自定义函数封装通用调用接口的方法：支持固定的data传参
// 1. 传输传递；返回值
// 2. 参数如何使用，具体的发送请求的过程，与axios有关
export default (options) => {
  let key = ''
  if (options.method) {
    key = options.method.toUpperCase() === 'GET' ? 'params' : 'data'
  } else {
    key = 'params'
  }
  return service({
    url: options.url,
    // 默认请求方式是GET
    method: options.method || 'GET',
    // 如果请求方式是GET就是有params属性传递参数，其他方式使用data属性传递参数
    // ES6的规则：对象的键key可以是动态的
    [key]: options.data
  })
}

